<html lang="zh-CN"><head><meta charset="UTF-8"><style>.nodata  main {width:1000px;margin: auto;}</style></head><body class="nodata " style=""><div class="main_father clearfix d-flex justify-content-center " style="height:100%;"> <div class="container clearfix " id="mainBox"><main><div class="blog-content-box">
<div class="article-header-box">
<div class="article-header">
<div class="article-title-box">
<h1 class="title-article" id="articleContentId">(C卷,100分)- 最大股票收益（Java & JS & Python & C）</h1>
</div>
</div>
</div>
<div id="blogHuaweiyunAdvert"></div>

        <div id="article_content" class="article_content clearfix">
        <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
        <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-044f2cf1dc.css">
                <div id="content_views" class="htmledit_views">
                    <h4 id="main-toc">题目描述</h4> 
<p>假设知道某段连续时间内股票价格&#xff0c;计算通过买入卖出可获得的最大收益。</p> 
<p>输入一个大小为 n 的数 price(p1,p2,p3,p4…….pn),pi 是第i天的股票价格。</p> 
<p>pi 的格式为股票价格(非负整型)加上货币单位 Y 或者 S,其中 Y 代表人民币,S 代表美元,这里规定 1 美元可以兑换 7 人民币。</p> 
<p>Pi 样例 1&#xff1a;123Y 代表 123 元人民币</p> 
<p>pi 样例 2&#xff1a;123S 代表 123 元美元,可兑换 861 人民币。</p> 
<p>假设你可以在任何一天买入或者卖出股票,也可以选择放弃交易,请计其在交易周期 n 天内你能获得的最大收(以人民币计算)。</p> 
<p></p> 
<h4 id="%E8%BE%93%E5%85%A5%E6%8F%8F%E8%BF%B0">输入描述</h4> 
<p>输入一个包含交易周期内各天股票价格的字符串&#xff0c;以<strong>空格</strong>分隔。不考虑输入异常情况。</p> 
<p></p> 
<h4 id="%E8%BE%93%E5%87%BA%E6%8F%8F%E8%BF%B0">输出描述</h4> 
<p>输出一个整型数代表在交易周期 n 天内你能获得的最大收益&#xff0c;n 不能超过 10000</p> 
<p>备注&#xff1a;股票价格只会用 Y 人民币或 S 美元进行输入&#xff0c;不考虑其他情况。</p> 
<p></p> 
<h4 id="%E7%94%A8%E4%BE%8B">用例</h4> 
<table border="1" cellpadding="1" cellspacing="1" style="width:500px;"><tbody><tr><td style="width:86px;">输入</td><td style="width:412px;">2Y 3S 4S 6Y 8S</td></tr><tr><td style="width:86px;">输出</td><td style="width:412px;">76</td></tr><tr><td style="width:86px;">说明</td><td style="width:412px;">无</td></tr></tbody></table> 
<p></p> 
<h4 id="%E9%A2%98%E7%9B%AE%E8%A7%A3%E6%9E%90">题目解析</h4> 
<p>本题其实少了一句话&#xff0c;那就是&#xff0c;手上只能保留一只股票&#xff0c;不能保留多只股票。</p> 
<p>如果可以保留多只股票&#xff0c;则用例2Y 3S 4S 6Y 8S&#xff0c;我前四个全要&#xff0c;即有四只股票&#xff0c;然后全部以8S价格卖出&#xff0c;那么最大利润为 8S * 4 - (2Y &#43; 3S &#43; 4S &#43; 6Y) &#61; 167&#xff0c;而不是76。</p> 
<p></p> 
<p>用例中的76输出&#xff0c;前提是手上只能保留一只股票。</p> 
<p><img alt="" height="372" src="https://img-blog.csdnimg.cn/8432d8ce16e84b8fb61c3203cfecd5b8.png" width="617" /></p> 
<p>即&#xff1a;</p> 
<p>2Y买进&#xff0c;3S卖出&#xff0c;赚19</p> 
<p>3S买进&#xff0c;4S卖出&#xff0c;赚7</p> 
<p>6Y买进&#xff0c;8S卖出&#xff0c;赚50</p> 
<p>共转76</p> 
<p></p> 
<p>这是一种贪心思维&#xff0c;即买涨不买跌&#xff0c;这样就稳赚不赔了。如上折线图&#xff0c;只买上升区段&#xff0c;不买下跌区段。</p> 
<p></p> 
<p>本题和<a href="https://blog.csdn.net/qfc_128220/article/details/128103449?spm&#61;1001.2014.3001.5502" title="LeetCode - 122 买卖股票的最佳时机 II_伏城之外的博客-CSDN博客">LeetCode - 122 买卖股票的最佳时机 II_伏城之外的博客-CSDN博客</a></p> 
<p>相同&#xff0c;题解请看链接博客说明。</p> 
<p></p> 
<h4 id="%E7%AE%97%E6%B3%95%E6%BA%90%E7%A0%81">JavaScript算法源码</h4> 
<pre><code class="language-javascript">/* JavaScript Node ACM模式 控制台输入获取 */
const readline &#61; require(&#34;readline&#34;);

const rl &#61; readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on(&#34;line&#34;, (line) &#61;&gt; {
  const arr &#61; line.split(&#34; &#34;).map((price) &#61;&gt; {
    const num &#61; parseInt(price.substring(0, price.length - 1));
    return price.at(-1) &#61;&#61;&#61; &#34;Y&#34; ? num : num * 7;
  });

  console.log(getResult(arr));
});

function getResult(arr) {
  let ans &#61; 0;
  for (let i &#61; 1; i &lt; arr.length; i&#43;&#43;) {
    ans &#43;&#61; Math.max(0, arr[i] - arr[i - 1]);
  }
  return ans;
}
</code></pre> 
<p></p> 
<h4>Java算法源码</h4> 
<pre><code class="language-java">import java.util.Arrays;
import java.util.Scanner;

public class Main {
  // 输入获取
  public static void main(String[] args) {
    Scanner sc &#61; new Scanner(System.in);

    Integer[] arr &#61;
        Arrays.stream(sc.nextLine().split(&#34; &#34;))
            .map(
                p -&gt; {
                  int num &#61; Integer.parseInt(p.substring(0, p.length() - 1));
                  String unit &#61; p.substring(p.length() - 1);
                  return &#34;Y&#34;.equals(unit) ? num : num * 7;
                })
            .toArray(Integer[]::new);

    System.out.println(getResult(arr));
  }

  // 算法入口
  public static int getResult(Integer[] arr) {
    int ans &#61; 0;
    for (int i &#61; 1; i &lt; arr.length; i&#43;&#43;) {
      ans &#43;&#61; Math.max(0, arr[i] - arr[i - 1]);
    }
    return ans;
  }
}
</code></pre> 
<p></p> 
<h4>Python算法源码</h4> 
<pre><code class="language-python"># 输入获取
tmp &#61; input().split()


# 输入转换
def convert(s):
    num &#61; int(s[:-1])
    unit &#61; s[-1]

    if unit &#61;&#61; &#39;Y&#39;:
        return num
    else:
        return num * 7


arr &#61; list(map(convert, tmp))


# 算法入口
def getResult():
    ans &#61; 0
    for i in range(1, len(arr)):
        ans &#43;&#61; max(0, arr[i] - arr[i - 1])
    return ans


# 算法调用
print(getResult())</code></pre> 
<p></p> 
<h4>C算法源码</h4> 
<pre><code class="language-cpp">#include &lt;stdio.h&gt;

#define MAX(a,b) ((a) &gt; (b) ? (a) : (b))

#define MAX_SIZE 10000

int main() {
    int incomes[MAX_SIZE];
    int incomes_size &#61; 0;

    int num;
    char unit;

    while(scanf(&#34;%d%c&#34;, &amp;num, &amp;unit)) {
        incomes[incomes_size] &#61; num * (unit &#61;&#61; &#39;Y&#39; ? 1 : 7);
        incomes_size&#43;&#43;;
        if(getchar() !&#61; &#39; &#39;) break;
    }

    int ans &#61; 0;
    for(int i&#61;1; i&lt;incomes_size; i&#43;&#43;) {
        ans &#43;&#61; MAX(0, incomes[i] - incomes[i-1]);
    }

    printf(&#34;%d\n&#34;, ans);

    return 0;
}</code></pre>
                </div>
        </div>
        <div id="treeSkill"></div>
        <div id="blogExtensionBox" style="width:400px;margin:auto;margin-top:12px" class="blog-extension-box"></div>
    <script>
  $(function() {
    setTimeout(function () {
      var mathcodeList = document.querySelectorAll('.htmledit_views img.mathcode');
      if (mathcodeList.length > 0) {
        for (let i = 0; i < mathcodeList.length; i++) {
          if (mathcodeList[i].naturalWidth === 0 || mathcodeList[i].naturalHeight === 0) {
            var alt = mathcodeList[i].alt;
            alt = '\\(' + alt + '\\)';
            var curSpan = $('<span class="img-codecogs"></span>');
            curSpan.text(alt);
            $(mathcodeList[i]).before(curSpan);
            $(mathcodeList[i]).remove();
          }
        }
        MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
      }
    }, 1000)
  });
</script>
</div></html>